<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 1. 返回的对象，对象的属性值是函数，对函数的引用，-> 称得上模块
        // 2. 返回的对象 引用的是里面的函数 而不是变量，里面的变量值是私有的状态，这是模块的常见操作
        // 3. 创建模块的条件
        // 3.1 一定要调用函数调用它，才能创建闭包
        // 3.2 一定是至少返回一个封闭函数。如果返回的是对变量的引用，就不是闭包
        function coolModule() {
            var something = 'cool'
            var another = [1, 2, 3]
            function doSomething() {
                console.log(something);
            }
            function doAnother() {
                console.log(another.join('!'))
            }
            return {
                doSomething: doSomething,
                doAnother: doAnother
            }
        }
        let foo = coolModule()
        foo.doAnother()
        foo.doSomething()
    </script>
</body>

</html>